package com.sky.service;

import com.sky.domain.PmsCategory;
import com.baomidou.mybatisplus.extension.service.IService;
import com.sky.vo.web.CateLog2VO;

import java.util.List;
import java.util.Map;

/**
* @author Administrator
* @description 针对表【pms_category(商品三级分类)】的数据库操作Service
* @createDate 2024-06-30 16:46:42
*/
public interface PmsCategoryService extends IService<PmsCategory> {


    /**
     * 将分类信息列表转换为树状结构列表。
     * <p>
     * 该方法通过遍历分类信息列表，构建出一个树状结构的列表，用于更直观、方便地管理分类。
     * 在树状结构中，每个分类可以有多个子分类，但每个分类只有一个父分类（除了根分类）。
     * 这种结构适用于展示具有层级关系的分类数据，例如电商平台的商品分类。
     *
     * @return List<PmsCategory> 返回一个树状结构的分类列表。
     */
    List<PmsCategory> listAsTree();

    /**
     * 获取分类路径。
     * <p>
     * 该方法通过递归的方式获取指定分类ID的路径，即从根分类到指定分类。
     *
     * @param catelogId 指定分类ID
     * @param path      用于存储分类路径的列表
     * @return List<Long> 返回一个包含分类ID的列表，列表中的元素按照从根分类到指定分类的顺序排列。
     */
    List<Long> getPath(Long catelogId,List<Long> path);

    /**
     * 更新分类信息。
     * <p>
     * 该方法用于更新分类信息，包括分类名称、分类图标、分类描述等。
     *
     * @param pmsCategory 包含更新信息的分类对象
     * @return boolean 返回一个布尔值，指示更新是否成功。
     */
    boolean updateCategory(PmsCategory pmsCategory);

    /**
     * 获取顶级分类列表。
     * <p>
     * 该方法用于获取所有顶级分类列表，即没有父分类的分类。
     *
     * @return List<PmsCategory> 返回一个包含顶级分类的列表。
     */
    List<PmsCategory> getCategoryTopLevel();

    /**
     * 获取分类JSON数据。
     * <p>
     * 该方法用于获取分类JSON数据，包括一级分类、二级分类和三级分类。
     *
     * @return Map<String, List < CateLog2VO>> 返回一个包含一级分类、二级分类和三级分类的Map。
     */
    Map<String, List<CateLog2VO>> getCatalogJson();
}
